iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
0

闡述一下想法和如何實作

先從最陽春的思考方式

1. 我們必須讓 Server 一直跑,等到有用戶加入時,可以馬上讀取到

2. 讀取到用戶加入聊天室後,我們就把該用戶丟進一個陣列 (隨著用戶加入、離開而增減)

3. 當用戶輸入文字訊息時,先將該訊息從用戶端傳到 Server 這裡,再對所有陣列內的用戶推送出去

大概如下的關係

https://ithelp.ithome.com.tw/upload/images/20201006/20129618nmufdAAL4g.png

https://ithelp.ithome.com.tw/upload/images/20201006/20129618VtTIHmHsa1.png

https://ithelp.ithome.com.tw/upload/images/20201006/20129618HPMWtvZc0m.png

如何實作出來?

Q:如何讓 Server 一直持續跑著?

A:開一個執行緒,裡面跑一個 while(true) 迴圈,迴圈裡面要執行

ServerSocket.accept(),這行程式碼會阻塞迴圈,等到有用戶連接到,才會傳進一個 Socket 對象


Q:如何將所有 Socket 對象存到一個陣列?

A:我們造一個 Singleton 存取每個 Socket 物件


Q:如何接收訊息,送出訊息?

A:當 ServerSocket.accept() 收到一個 Socket 對象時,我們把該對象丟進陣列,並丟進一個執行緒,在裡面跑 While 等待訊息進入,並寫一個推送的方法,當接收到訊息後,將該訊息推送給陣列內的所有 Socket (用戶)


Q:如何判斷用戶離開?

A:利用心跳包,其實就是固定每過一段時間就傳給 Server 某個訊息,證明自己還在連線中。


先大概知道每一個步驟大概在幹嘛

明天上程式碼就可以很快理解了!


上一篇
Day22 - 下載安裝 Eclipse ( 聊天室 )
下一篇
Day24 - Server端 程式碼實作聊天室
系列文
菜雞 Android APP 從安裝 Android Studio 到上架 Google Play30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言